{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Finite Element Methods\n",
    "\n",
    "We use the linear finite element method for solving the Poisson equation as an example to explain the main ingredients of finite element methods. We recommend to read \n",
    "\n",
    "- [Introduction to Finite Element Methods](http://www.math.uci.edu/~chenlong/226/Ch2FEM.pdf)\n",
    "- [Progamming of Finite Element Methods](http://www.math.uci.edu/~chenlong/226/Ch3FEMCode.pdf)\n",
    "\n",
    "and do the following project\n",
    "- [Projects: Linear Finite Element Methods](../project/projectFEM.html)\n",
    "\n",
    "The numerical example using the linear element is in\n",
    "- [Linear Element for Poisson Equation in 2D](Poissonfemrate.html)\n",
    "\n",
    "and more elements and equations can be found\n",
    "- [List of Examples](femexamplelist.html)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Variational formulation\n",
    "\n",
    "The classic formulation of the Poisson equation reads as\n",
    "\n",
    "$$ - \\Delta u = f  \\text{ in }  \\Omega, \\qquad u  = g_D  \\text{ on }\n",
    "\\Gamma _D,  \\qquad  \\nabla u\\cdot n = g_N  \\text{ on } \\Gamma _N, $$\n",
    "\n",
    "where $\\partial \\Omega = \\Gamma _D\\cup \\Gamma _N$ and $\\Gamma _D\\cap \\Gamma _N=\\emptyset$. \n",
    "We assume $\\Gamma _D$ is closed and $\\Gamma _N$ open.\n",
    "\n",
    "Denoted by $H_{g_D}^1(\\Omega)=\\{v\\in L^2(\\Omega), \\nabla v\\in L^2(\\Omega) \\text{ and } v|_{\\Gamma _D} = g_D\\}$. Multiplying the Poisson equation by a test function $v\\in H_{0_D}^1$ and using integration by parts, we obtain the weak formulation of the Poisson equation: find $u\\in H_{g_D}^1(\\Omega)$ such that for all $v\\in H_{0_D}^1$:\n",
    "\n",
    "$$ \n",
    "a(u,v) := \\int _{\\Omega} \\nabla u\\cdot \\nabla v\\, {\\rm dxdy} = \\int _{\\Omega} fv \\, {\\rm dxdy} + \\int _{\\Gamma _N} g_N v \\,{\\rm d}S.\n",
    "$$\n",
    "\n",
    "Let $\\mathcal T$ be a triangulation of $\\Omega$. We define the linear\n",
    "finite element space on $\\mathcal T$ as \n",
    "\n",
    "$$\n",
    "\\mathcal V_{\\mathcal T} = \\{v\\in C(\\bar \\Omega) : v|_{\\tau}\\in \\mathcal P_k, \\forall \\tau \\in \\mathcal T\\}. \n",
    "$$\n",
    "\n",
    "where $\\mathcal P_k$ is the polynomial space with degree $\\leq k$. \n",
    "\n",
    "The finite element method for solving the Poisson\n",
    "equation is to find $u\\in \\mathcal V_{\\mathcal T}\\cap H_{g_D}^1(\\Omega)$ \n",
    "such that for all $v\\in \\mathcal V_{\\mathcal T}\\cap H_{0_D}^1(\\Omega)$:\n",
    "\n",
    "$$\n",
    "a(u,v) = \\int _{\\Omega} fv \\, {\\rm dxdy} + \\int _{\\Gamma _N} g_N v \\,{\\rm d}S.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Finite element space\n",
    "\n",
    "We take linear finite element spaces as an example. For each vertex $v_i$ of $\\mathcal T$, let $\\phi _i$ be the piecewise linear function such that $\\phi _i(v_i)=1$ and $\\phi _i(v_j)=0$ when $j\\neq i$. The basis function in 1-D and 2-D is illustrated below. It is also called hat function named after the shape of its graph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n7/9O/yzzGnXUTQ2EEIm2aXkmiTrS7UPDpgZlvfPOOzE2NQBwRpUB6fz588XFxe+++24wGPz8889v\nvvnm//3f/6U/8ng8YZ+hUn+4RO6Klu7TMxgtJkm9K1rmv2BLS0vYX7C2tla6t5O/w0wJAhJoii4Y\nDEZ9JmXcvn37fvnLX06bNu3cuXPPPffcihUrQn8qZqouW7ZMnrRKORNj6dsRQuT/C957773y5OGK\nf8Gqqiqp347I3mESt337dkEQ/vVf/1XphgDIQa0BiRASDAYHBweNRqNer8qVMAAACKXigAQAADxR\nZWIsAADwh8+AFAgEenp6hoaGlG6IwmL8Hv72t7+dC4GB8rfffitmArEPPVyETp449js5h6svTU1N\nr776an5+fm9vr9PpfOmll5RukTJi/x5qamree+89g2HieI7f//73OTk5SjSTFW+//bbf71fF9gH0\ncBE6+ZSooJMrucVPAjHqrmpK3N/Dz372s08++USh1rElkTKm7EAPF6GTJ04tnZy3KbvJ6q5qTdzf\nw9GjR7///e/39vaG1rzQJnWVMUUPF6GTJ04tnZy3KbvJ6q5qTezfwzfffHP27NmKiorh4eEzZ878\nwz/8w/PPP69EM5mgrjKm6OEidPLEqaWT8xaQJqu7qjWxfw9nz5598MEH165de+2113Z3d//kJz8p\nLi4uLS1VoqUwNejhInRy/vA2ZTdZ3VWtif17uOGGG958881rr72WEHLzzTeXl5e3t7cr0EqYOvRw\nETo5f3gLSHPnzg0dk3o8nuuuu0655igm9u+ho6OjublZ/PLixYsXLlyQs3mQNPRwETo5f3gLSFar\ndXR0tLGxkRDS3d3d1tY22fkCfJvs99DQ0NDV1RUIBKqrq3t7ewkhX3755b59++677z6FWwyJQQ8X\noZNzSOltfum3d+/ekpKSRYsW3XLLLe+8847SzVFM1N9DSUnJW2+9FQwGa2pqFi5ceP/99y9atIjW\nTdc4FdXVRg8XoZNPCfudnM9adkHUXSWExPs9jI+P+3w+jacKqhR6uAidnCd8BiQAAFAd3taQAABA\npRCQAACACQhIAADABAQkAABgAgISAAAwAQEJAACYgIAEAABMQEACAAAmICABAAATEJAAAIAJCEgA\nAMAEBCQAAGACAhIAADABAQkAAJiAgAQAAExAQAIAACYgIAEAABMQkAAAgAkISAAAwAQEJAAAYAIC\nEgAAMAEBCQAAmICABAAATEBAAgAAJiAgAQAAExCQAACACf8fblhnwyo5nXgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = 0:1/5:1;\n",
    "u = zeros(length(x),1);\n",
    "u(2) = 1;\n",
    "figure;\n",
    "subplot(1,2,1); hold on; \n",
    "plot(x,0,'k.','MarkerSize',18); \n",
    "plot(x,u,'-','linewidth',1.2);\n",
    "subplot(1,2,2); hold on;\n",
    "u = sin(2*pi*x);\n",
    "plot(x,u,'-o','linewidth',1.2,'MarkerSize',10);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA\nB3RJTUUH4gkCDCwjog1ZawAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJ\nbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwMi1TZXAtMjAxOCAwNTo0NDozNWXdhBEAAB/L\nSURBVHic7d3NcetIlgbQZEdvx4H2pFcqn8oAkgaUT4+r8qQcaAM0C/BBIP6YABLABXhOTEywKRFE\nSXr58WZeJC7f398JAPb2r71PAABSEkgABCGQAAhBIAEQgkACIASBBEAIAgmAEAQSACEIJABCEEgA\nhCCQAAhBIAEQgkACIASBBEAIAgmAEAQSACEIJABCEEgAhCCQAAhBIAEQgkACIASBBEAIAgmAEAQS\nACEIJABCEEgAhCCQAAhBIAEQgkACIASBBEAIAgmAEAQSACEIJABCEEgAhCCQAAhBIAEQgkACIASB\nBEAIAgmAEAQSACEIJABCEEgAhCCQAAhBIAEQgkACIASBBEAIAgmAEAQSACEIJABCEEgAhCCQAAhB\nIAEQgkACIASBBEAIAgmAEAQSACEIJABCEEgAhCCQAAhBIAEQgkACIASBBEAIAgmAEAQSACEIJABC\nEEgAhCCQAAhBIAEQgkACIASBBEAIAgmAEAQSACEIJABCEEgAhCCQAAhBIAEQgkACIASBBEAIAgmA\nEAQSACEIJABCEEgAhPDvvU8ATu5yuVQPvr+/9z0TCE6FBOVdGn6evF+6djxJiEaFBMXUAfP1/ZVS\nelwe9ePu/3y+5H5Jt/Zx1FJ8pos/fVjip8q5pa/rT9g8Lo+v76/q/zefrB60YqnlcX+0Usq/Uz6B\nQILJhkKo1ptG9Zfqxy9Z9XikX/1v93X9ql7lXyvnZsoOsjTXe0bqm8flkW6D3/B4/C59bindfofT\nLaWUvq5f6Ss97o24akbd7XkOMokT8/cNgzJDqFaXRI/HI/2RuotD3Tm9lDqxNHTw+/Pb/JvlrFRI\n0NbqTRjSnmS7pXT7iY33r729lFO983stX9evR3qokzgrf9mQ0uiy0NDqTv1t3fa5oXSpZ+R6X1v1\nMozNB94f1Wur7/SPl5MRSHyul8uAfqWRnoKRg3Szp91ZN7QsNPCS3u7w+lBVGlXHeVwe/v1yJgKJ\nj9MshmrjqTNksI9u+pF7G8R7Di6TOC+BxGe5XC5f31/NquXpj/T1NSGTeqbpqpm922Av+Jxjdp+p\no6iRSUlHOKcgkPggVRoNfbUnpQbqm5duul8/35nTmPBW7xxgau740MmkpFTiFAQSn6KaqZsaGD0p\ndfuZ62u3P5QIpKHjvLQ/PB5VPSeTOBNt33yQGWnRjZy10yil1LvLw0t3+K+UOm/19f1Vha5Y4qDs\n9s1HuFx69jCd5HF5PC8bun6l373XvbN8RVSZ1Nxn6Of5+yPd0uPRaAFvfLWOJTgcU3ac37zJuqa6\nMPqZH2ss5KT0/krYJW/d3wL+egFTt1zzT5vDUSFxcqXSaKhx7uv61VxVKq4qlXqfT7+edVurTkqN\n6Ts4EGtIMKjeZa556U+l9UwdCfMavsfVmdSO1V8vN156pNcztKTE0Ziy48yWlEfNwqg7J1Y/2bsv\nwxqxlHo7wl+77FLvtbSm7zgIU3ac1nPO6jbntW/TKHUaCuon1+t3GJq+q7/6c0uL1+dN33EIKiTO\nKXPH7l6tRaOhQErvWr1XqpaGrpNtvmm3ycKGDsSnQuKEZqfR4/J4brmdnUYjldBK1VLV2z1UKj27\n0r+/HveXrnEd4cQnkDip2+RX1IVRThrlq2Np4XHah607Hbotdr8bLroXM8kkIjNlx9nMK4+6vd3j\nafRyw4i83FpjBq+u0oZ6LupvS81ZPm0OhKTtm1Op2+ryK5Jmb/d6J5bST4tEKhdLdZ3U6vlOr43p\nze7w59zd/eIWf0SjQuI8ftIoe1u5oYte88ujnO/vOULpaql/P9beyqm5xYNSiUgEEucxdbKuVBq9\nfcngoYrG0qQT+7mDhkwiDE0NnMTUa2DnpdGQeW0LhdvwbunR2Y916MTqNryqzUGnAxGokDiDSZN1\nI3vTvU2jkeMvbMkrUi31bh4xfm71DJ5Sid1pauDwnncl/92bMG58p9QluvvdTX15mpVqrZLocXt0\nn0x9XQ/P9230O1wuPqGyJ39/HF7VMJZTHo2n0ZLyKPMIOYZKpcErYTvF0M8tBJub7A1tGd73FoYF\ndiGQOLbMybq3vd3L0yjzOG9ePr5VXd4RWk3eI+c28nZGBrZnyo4De07WvesIeDtNV6SymWRCuTN9\nYWl8N9jWLSqGzs30HdvzN8dR1UtH4+VRzqJRqfKodbTl5U59wJQXS62NG3pvSJG7r4QeBzYnkDik\n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\nSUVORK5CYII=\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA\nB3RJTUUH4gkCDCwjog1ZawAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJ\nbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwMi1TZXAtMjAxOCAwNTo0NDozNWXdhBEAAB11\nSURBVHic7d1tWqRIlIDRyHlmH/ZO7J1ZuTPdyeRKnB/YFJJA8hERXOCcX9V2lWZZyusNILh9f38n\nANjb/+z9AgAgJUECIAhBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIg\nBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAE\nQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARB\nAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEEC\nIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIg\nBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAE\nQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARB\nAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEEC\nIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIg\nBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAE\nQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARB\nAiAEQQIgBEECIARBAiAEQQIgBEHiQm63294vARglSFxFUyNNgrAEiUtoOvT+/Z40CaISJABCECTO\n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\nB2HzCZI4W9iteZ7T4B2yBZ7FPrpJ4D/p7W3kor5Id8vuflV6G6dQn5OrHZ8t2WXzvEwX/+evTT5T\nen/xW052g2eWZb2fz8n3+q3tXr62meLcnBThZbQv4H6/pz/9N1Z2qWW6LhNSHi+vXwgepxKLdVlq\nFGc8mjAdp/ZzNf/ptyvGndUiPMov4HdEY5dv2wsORi1BymDL1XQRvhWX1ii9ClLG65gPEaSutiV/\nw3N/vH28Dea5u4V5V+Wxcq8mRRiM5qvzbXvlGiVB2mj7Ta+7x6lEjfLuCnqsILUej0f6v5TSr03Q\nf/knpX8yn0laZ68dHA5Uo54S37aXXabrcg5pvSw3vZ7snNPJThot8riPPnuwOwZ1W/5I43+koson\nk4Iv082R/dv24oNRy4S0Uum96epc85N3PCpRo2gT0kR1nrcquN/vz29v3th4+wj0GNw6c9KhB6OX\n1sVJjVqCtFjlR0iUu+ZnRY3SxHXMBc587HiwHgvP/A1y7vf7y9/884/7J6Xfk9NeSjfp3DXqmRMn\ny3Q9grTMvo+QyLuml2s8KrdMVzpIi8adRebU6O9vvt0/vj96k9OWj75FoSadYJlui8HvXIPRM0Fa\nIMgDjRob47SmRoPXiZU8aZQlSOWqM2hwme7FH3l+3s+uccrepEsNRhN6u7c49j4TpLlC1ahnaZyy\nLNZV2KN62TO/Ny+ybbdoMPr1B8cP2fXjlDdIF6zR9LZhlukmCNJrkZ87/mzmyvXGxboKV9MN1qjy\nuLPI6hql2UftanHK0qRzL9ONbk07+Ve2TDfNZd8vRB6MBr28IHXdeNRVo0b3RxrKz+7VGbRimW6d\n7ocoGqftF4KfZjDKuEuyGr1kQppyuBpN+Pt9tXyT6bHNbzaaHneOckTbMhj9ej8b/r6F4rR6TjrK\nv11r3biz9P072L5kQhp2rGW6Odr167f3t3Ubg65/oFGAszuF5KrRRoUmpxVzUvBlul0eCmMwms+E\nNOBMg1HX4GLdyzhNbMXW+21j/2vFITv+j9gllunyPyk1R5zmz0lB/tVKjzuLqNEiJqS+S9UozXuk\nQrdGJx535gsyGL1U7ZxT2vvxel1Bvn8t061gQvrrfMt0rRUP3/v51Wf/f9U5EAf5WXtQ0RrV+Ysv\njdP0kFR0mS7UuDOfwWgdE9KPsw5G06af9va4P5ojb/f4dWXVrqYrbenkNHEyKVdBg487i6jRaiak\n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\n05xlunOMO/M5acQiJiRYZjBOvcHoxOPOfAYjlhIkWK//GNzGVZ9426VGrCBIkEeEm3AjsEzHaoIE\n+V02TgYjthAkKOs6cVIjNhIkqOescbJMRxaCBPs4TZwMRuQiSLC/48ZJjchIkCCWo8TJMh3ZCRLE\nFTZOBiNKECQ4hjZOu5dJjShEkOBgdhybLNNRlCDBgdWMk8GI0gQJTqJonNSICgQJTihjnCzTUY0g\nwcltiZPBiJoECS5kUZzUiMoECS5qIk6W6diFIAH9Jw06LLALQQIghP/Z+wUAQEqCBEAQggRACIIE\nQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRA\nCIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAI\nggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiC\nBEAIggRACIIEQAiCBEAI/w8ZojDRjk6vTAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "% 2-D hat basis\n",
    "clf; \n",
    "[node,elem] = squaremesh([-1,1,-1,1],0.5);\n",
    "phi = zeros(size(node,1),1);\n",
    "phi(12) = 1;\n",
    "subplot(1,2,1);\n",
    "showmesh(node,elem,'facecolor','none'); hold on;\n",
    "showsolution(node,elem,phi,[30,26],'facecolor','g','facealpha',0.5,'edgecolor','k');\n",
    "u = 3-node(:,1).^2 - node(:,2).^2; % x^2 + y^2\n",
    "% u = sin(node(:,1)).*cos(node(:,2));\n",
    "subplot(1,2,2);\n",
    "showmesh(node,elem); hold on;\n",
    "showsolution(node,elem,u,[30,26],'facecolor','g','facealpha',0.5,'edgecolor','k');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then it is easy to see $\\mathcal V_{\\mathcal T}$ is spanned by $\\{\\phi\n",
    "_i\\}_{i=1}^{N}$ and thus for a finite element function $v=\\sum\n",
    "_{i=1}^Nv_i\\phi _i$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Linear Algebraic System\n",
    "\n",
    "For any function $v\\in V_{h}$, there is a unique representation: $v=\\sum _{i=1}^Nv_i\\phi _i$.  We thus can define an isomorphism $V_{h}\\cong \\mathbb R^N$ by\n",
    "\n",
    "$$\n",
    "v=\\sum _{i=1}^Nv_i\\phi _i \\longleftrightarrow \\boldsymbol  v=(v_1, \\cdots, v_N)^{\\intercal},\n",
    "$$\n",
    "\n",
    "and call $\\boldsymbol  v$ the coordinate vector of $v$ relative to the basis $\\{\\phi _i\\}_{i=1}^{N}$. Following the terminology in elasticity, we introduce the *stiffness matrix*\n",
    "\n",
    "$$\n",
    "\\boldsymbol  A=(a_{ij})_{N\\times N}, \\, \\text{ with } \\quad a_{ij}=a(\\phi _j,\\phi _i),\n",
    "$$\n",
    "\n",
    "and the load vector $\\boldsymbol  f=\\{\\langle f, \\phi_k \\rangle\\}_{k=1}^{N}\\in \\mathbb{R}^{N}$. Then the coefficient vector can be obtained by solving the following linear algebraic system\n",
    "\n",
    "$$\n",
    "\\boldsymbol  A\\boldsymbol  u = \\boldsymbol  f.\n",
    "$$\n",
    "\n",
    "It is straightforward to verify $\\boldsymbol  A$ is a symmetric and positive definite (SPD) matrix and thus the solution $\\boldsymbol  u$ exists and unique."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Further reading\n",
    "\n",
    "- Error estimate of the linear finite element method can be found in [Introduction to Finite Element Methods](http://www.math.uci.edu/~chenlong/226/Ch2FEM.pdf)\n",
    "\n",
    "- Assembling the matrix $\\boldsymbol A$ and the vector $\\boldsymbol f$ can be found in [Progamming of Finite Element Methods](http://www.math.uci.edu/~chenlong/226/Ch3FEMCode.pdf)\n",
    "\n",
    "- Fast solvers for solving the linear algebraic equation can be found in [Multigrid Methods](https://www.math.uci.edu/~chenlong/226/MGintroduction.pdf)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Matlab",
   "language": "matlab",
   "name": "matlab"
  },
  "language_info": {
   "codemirror_mode": "octave",
   "file_extension": ".m",
   "help_links": [
    {
     "text": "MetaKernel Magics",
     "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md"
    }
   ],
   "mimetype": "text/x-matlab",
   "name": "matlab",
   "version": "0.14.3"
  },
  "toc": {
   "colors": {
    "hover_highlight": "#DAA520",
    "navigate_num": "#000000",
    "navigate_text": "#333333",
    "running_highlight": "#FF0000",
    "selected_highlight": "#FFD700",
    "sidebar_border": "#EEEEEE",
    "wrapper_background": "#FFFFFF"
   },
   "moveMenuLeft": true,
   "nav_menu": {
    "height": "102px",
    "width": "252px"
   },
   "navigate_menu": true,
   "number_sections": true,
   "sideBar": true,
   "threshold": 4,
   "toc_cell": false,
   "toc_section_display": "block",
   "toc_window_display": true,
   "widenNotebook": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
